﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SmallERP.DAL;

namespace SmallERP.Bll.PinBan
{
    /// <summary>
    /// 全自动拼板的模板操作类
    /// </summary>
    public class AutoPBTemplateBLL
    {
        private const int MAXNUM = 100;

        const float LIMITWRASTE = 0.05f;//浪费小于这个值的才可以被添加到拼板模板中
        public static void AddTemplate(Board curBoard, smallerpDataContext db)
        {
        //    if (curBoard != null && curBoard.WasteRate <= LIMITWRASTE)
        //    {
        //        AutoBoardTemplate abt = new AutoBoardTemplate()
        //        {
        //            Height = (double)curBoard.Height / curBoard.DPI,
        //            Length = (double)curBoard.Length / curBoard.DPI,
        //            UseNUM = 0,
        //            Waste = curBoard.WasteRate
        //        };
        //        foreach (var pm in curBoard.PicMakeUp)
        //        {
        //            abt.AutoBoardDetail.Add(new AutoBoardDetail()
        //            {
        //                BarCodeStatus = pm.BarCodeStatus,
        //                Height = pm.IsWhirl ? Convert.ToInt32(pm.photoInfo.Width * curBoard.DPI) : Convert.ToInt32(pm.photoInfo.Height * curBoard.DPI),
        //                Length = pm.IsWhirl ? Convert.ToInt32(pm.photoInfo.Height * curBoard.DPI) : Convert.ToInt32(pm.photoInfo.Width * curBoard.DPI),
        //                X = Convert.ToInt32(pm.X),
        //                Y = Convert.ToInt32(pm.Y)
        //            });
        //        }

        //        if (!CheckHasInDB(abt, db))
        //        {
        //            if (CheckNumIsOk(db,abt))
        //            {
        //                db.AddToAutoBoardTemplate(abt);
        //            }                   
        //        }
        //    }
        }

        /// <summary>
        /// 检查该模板是否已在数据库中，如果无才添加
        /// </summary>
        /// <param name="abt"></param>
        /// <param name="db"></param>
        /// <returns></returns>
        private static bool CheckHasInDB(AutoBoardTemplate abt, smallerpDataContext db)
        {
            ////AutoBoardTemplate atT = db.AutoBoardTemplate.FirstOrDefault(t => t.Height == abt.Height && t.Length == abt.Length && t.Waste == abt.Waste);

            //foreach (var atT in db.AutoBoardTemplate.Where(t => t.Height == abt.Height && t.Length == abt.Length && t.Waste == abt.Waste).ToList())
            //{
            //    if (!atT.AutoBoardDetail.IsLoaded)
            //    {
            //        atT.AutoBoardDetail.Load();
            //    }
            //    if (atT.AutoBoardDetail.ToList().Count==abt.AutoBoardDetail.Count)
            //    {
            //        return true;
            //    }
            //    else
            //    {
            //        continue;
            //    }

            //}
            return false;
        }

        /// <summary>
        /// 检查模板的数量是否达到1000个，如果达到了，则将使用率最低、流费率高的替换掉
        /// </summary>
        /// <returns>true:可以添加 False 不可以添加</returns>
        private static bool CheckNumIsOk(smallerpDataContext db, AutoBoardTemplate abt)
        {
            //if (db.AutoBoardTemplate.Count() < MAXNUM)
            //{
            //    return true;
            //}
            //else
            //{
            //   AutoBoardTemplate cut= db.AutoBoardTemplate.Where(t => t.Waste > abt.Waste).OrderBy(t => t.UseNUM).First();
            //   if (cut!=null)
            //   {
            //       db.DeleteObject(cut);
            //       return true;
            //   }
            //   else
            //   {
            //       return false;
            //   }
            //}
            return false;
        }

        /// <summary>
        /// 更改模板使用的次数
        /// </summary>
        /// <param name="userList"></param>
        public static void ChangeUseNum(List<AutoBoardTemplate> userList)
        {
            //using (smallerpDataContext db=new smallerpDataContext ())
            //{
            //    foreach (var at in userList)
            //    {
            //        db.AutoBoardTemplate.FirstOrDefault(t => t.BoardTemplateId == at.BoardTemplateId).UseNUM=at.UseNUM;           
            //    }

            //    db.SaveChanges();
            //}
        }
    }
}
